Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.
Assume a BST is defined as follows:
- The left subtree of a node contains only nodes with keys less than or equal to the node's key.
- The right subtree of a node contains only nodes with keys greater than or equal to the node's key.
- Both the left and right subtrees must also be binary search trees.
For example:
Given BST [1,null,2,2]
,
1 \ 2 / 2
return [2]
.
Note: If a tree has more than one mode, you can return them in any order.
Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = NoneclassSolution: deffindMode(self, root: TreeNode) ->List[int]: nodes= [] curr=rootprev=0cnt=0max_cnt=1modes= [] whilenodesorcurr: whilecurr: nodes.append(curr) curr=curr.leftcurr=nodes.pop() ifcurr.val==prev: cnt+=1else: ifcnt==max_cnt: modes.append(prev) elifcnt>max_cnt: modes= [prev] max_cnt=cntprev=curr.valcnt=1curr=curr.rightifcnt==max_cnt: modes.append(prev) elifcnt>max_cnt: modes= [prev] returnmodes